home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 February
/
EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso
/
earcd
/
editor
/
mail2gui.lha
/
Mail2guide.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-11-17
|
8KB
|
296 lines
/*
Mail2guide by CTS
*/
/*+ "includes and defines" */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXL 128
#define english 1
/* english 1 for english error messages, anything else for german */
/*- */
const char ver[] = "$VER: Mail2guide 0.13 (17.11.1995)";
const char space80[]=" ";
/*+ "Subroutines" */
/*+ "usage()" */
void usage()
{ printf("Usage: Mail2guide <infile.mail> <outfile.guide>\n");
}
/*- */
/*+ "fin_error()" */
void fin_error()
#if english == 1
{ printf("Can't open input file.\n"); }
#else
{ printf("Kann Eingabedatei nicht öffnen.\n"); }
#endif
/*- */
/*+ "fout_error()" */
void fout_error()
#if english == 1
{ printf("Can't open output file.\n"); }
#else
{ printf("Kann Ausgabedatei nicht öffnen.\n"); }
#endif
/*- */
/*+ "fout_exists()" */
void fout_exists()
#if english == 1
{ printf("output file exists!\n"); }
#else
{ printf("Ausgabedatei existiert schon!\n"); }
#endif
/*- */
/*+ "tmp_error()" */
void tmp_error()
#if english == 1
{ printf("Can't open tmp file.\n"); }
#else
{ printf("Kann tmp datei nicht öffnen.\n"); }
#endif
/*- */
/*+ "help()" */
void help()
#if english == 1
{ printf("This program converts a mail file to a file readable with AmigaGuide.\n\n"); }
#else
{ printf("Dieses Program wandelt ein mail file in eine AmigaGuide datei.\n\n"); }
#endif
/*- */
/*+ "del_at(lin)" */
void del_at(lin)
char lin[MAXL];
{ int i;
i=0;
while (lin[i]!=0)
{
if (lin[i]=='@') { lin[i]='*'; }
i++;
}
}
/*- */
/*+ "del_quote(lin)" */
void del_quote(lin)
char lin[MAXL];
{ int i;
i=0;
while (lin[i]!=0)
{
if (lin[i]=='"') { lin[i]='\''; }
i++;
}
}
/*- */
/*- */
/*+ "main(argc,argv)" */
main(argc,argv)
int argc;
char *argv[];
{ long int i,j,k;
FILE *in,*out,*tmp;
int header,body,from_to,subject;
char line[MAXL],title[MAXL],name[MAXL],from_to_name[MAXL],nline[MAXL];
/*+ "Copyright" */
printf ("%s\n",ver+6);
printf ("(C)1995 Christian T. Steigies (steigies@physik.uni-kiel.d400.de)\n");
printf ("Freeware, NO commercial usage ;-)\n\n");
/*- */
/*+ "in und out files checken, öffnen" */
if (argc==2)
{ if ( !( strcmp(argv[1],"-h") ) || !( strcmp(argv[1],"?") ) )
{
atexit(&usage);
atexit(&help);
exit(EXIT_SUCCESS);
}
}
if (argc!=3)
{ atexit(&usage);
exit(EXIT_SUCCESS);
}
if ((in=fopen(argv[1],"r"))==0) /* Eingabefile zum lesen öffnen */
{ atexit(&usage);
atexit(&fin_error);
exit(EXIT_SUCCESS);
}
if ((out=fopen(argv[2],"r"))==0) /* Ausgabefile öffnen */
{
if ((out=fopen(argv[2],"w"))==0)
{ atexit(&usage); atexit(&fout_error); exit(EXIT_SUCCESS); }
}
else /* file existiert schon! */
{ atexit(&usage); atexit(&fout_exists); exit(EXIT_SUCCESS); }
if ((tmp=tmpfile())==0) /* tmp file öffnen */
{ atexit(&tmp_error);
exit(EXIT_SUCCESS);
}
/*- */
/*+ "Variablen initialisieren" */
printf("converting %s to %s\n\n",argv[1],argv[2]);
fprintf(out,"@DATABASE Mail2guide.guide\n\n");
fprintf(out,"@MASTER mail file: %s\n\n",argv[1]);
fprintf(out,"@WIDTH 74\n\n");
i=0;j=0; /* i: Zeilen einer mail, j: # der mails */
header=0;body=0;
from_to=0;subject=0;
/*- */
/*+ "Headerbeginn suchen" */
while ( !feof(in) )
{ fgets(line,80,in);
if ( header==0 && 0==strncmp(line,"From ",5) )
{ j++;
if ( body==1 )
{ fprintf(out,"@ENDNODE\n\n");
}
header=1; body=0; from_to=0; subject=0;
fprintf(out,"@NODE h%08i \"%s",j,line); /* nur ein " reicht! */
fprintf(out,"@PREV h%08i\n",j-1);
fprintf(out,"@NEXT h%08i\n",j+1);
fprintf(out,"@TOC main\n");
}
/*- */
/*+ "Header NODE" */
if ( header==1 )
{
del_at(line);
fprintf(out,"%s",line);
}
/*- */
/*+ "Absender suchen" */
if ( header==1 && from_to==0 && 0==strncmp(line,"From: ",6) )
{ strcpy(name,line+6);
strcpy(from_to_name,line);
from_to=1;
}
/*- */
/*+ "Empfänger suchen" */
if ( header==1 && from_to==0 && 0==strncmp(line,"To: ",4) )
{ strcpy(name,line+4);
strcpy(from_to_name,line);
from_to=1;
}
/*- */
/*+ "Subject suchen" */
if ( header==1 && subject==0 && 0==strncmp(line,"Subject: ",9) )
{ strcpy(title,line+9);
subject=1;
}
/*- */
/*+ "Header Ende suchen" */
if ( header==1 && line[1]==0 ) /* Leerzeile ist header-ende */
{ body=1; header=0;
do
{ if (!feof(in))
{ fgets(line,80,in);
i++;
}
}
while ( line[1]==0 && !feof(in) );
/* Leerzeilen zwischen header und body entfernen */
fprintf(out,"\n @{\" Read the mail \" LINK m%08i }\n",j);
fprintf(out,"@ENDNODE\n\n",j);
fprintf(out,"@NODE m%08i \"%s",j,from_to_name);
/* nur ein " reicht! */
fprintf(out,"@PREV m%08i\n",j-1);
fprintf(out,"@NEXT m%08i\n",j+1);
fprintf(out,"@TOC main\n");
fprintf(out," @{\" Read the header \" LINK h%08i }\n\n",j);
if ( from_to==1 )
{ fprintf(tmp,"%s",name);
}
else
{ fprintf(tmp,"nobody...\n");
}
printf("%s",name);
if ( subject==1 )
{ fprintf(tmp,"%s",title);
}
else
{ fprintf(tmp," <none> \n");
}
printf("%s",title);
}
/*- */
/*+ "Body NODE" */
if ( body==1 )
{
del_at(line);
fprintf(out,"%s",line);
}
}
fprintf(out,"@ENDNODE\n");
/*- */
/*+ "empty body before 1" */
fprintf(out,"@NODE m%08i \"This mail does not exist\"\n",0);
fprintf(out,"@PREV m%08i\n",0);
fprintf(out,"@NEXT m%08i\n",1);
fprintf(out,"@TOC main\n");
fprintf(out,"This mail exists only in your imagination...\n");
fprintf(out,"@ENDNODE\n");
/*- */
/*+ "empty body after last" */
fprintf(out,"@NODE m%08i \"This mail does not exist\"\n",j+1);
fprintf(out,"@PREV m%08i\n",j);
fprintf(out,"@NEXT m%08i\n",j+1);
fprintf(out,"@TOC main\n");
fprintf(out,"This mail exists only in your imagination...\n");
fprintf(out,"@ENDNODE\n");
/*- */
/*+ "empty header before 1" */
fprintf(out,"@NODE h%08i \"I'm serious! This mail does NOT exist!\"\n",0);
fprintf(out,"@PREV h%08i\n",0);
fprintf(out,"@NEXT h%08i\n",1);
fprintf(out,"@TOC main\n");
fprintf(out,"This mail exists only in your imagination...\n");
fprintf(out,"@ENDNODE\n");
/*- */
/*+ "empty header after last" */
fprintf(out,"@NODE h%08i \"I'm serious! This mail does NOT exist!\"\n",j+1);
fprintf(out,"@PREV h%08i\n",j);
fprintf(out,"@NEXT h%08i\n",j+1);
fprintf(out,"@TOC main\n");
fprintf(out,"This mail exists only in your imagination...\n");
fprintf(out,"@ENDNODE\n");
/*- */
/*+ "main NODE" */
fsetpos(tmp,0);
fprintf(out,"@NODE main \"Guide for %s\"\n",argv[1]);
fprintf(out,"@PREV main\n");
fprintf(out,"@NEXT main\n");
fprintf(out,"This is an AmigaGuide® file made by Mail2guide\n\n");
for(k=1; k<=j; k++)
{ fgets(name,80,tmp);
del_quote(name);
name[strlen(name)-1]=0;
strcat(name,space80);
fprintf(out,"@{\" %-41.41s \" LINK m%08i } ",name,k);
fgets(title,80,tmp);
del_quote(title);
title[strlen(title)-1]=0;
strcat(title,space80);
fprintf(out,"@{\" %-41.41s \" LINK h%08i }\n",title,k);
}
fprintf(out,"@ENDNODE\n");
/*- */
/*+ "files schliessen" */
fclose(out);
fclose(in);
printf("\nReady.\n");
exit(EXIT_SUCCESS);
/*- */
}
/*- */